Introduction
BNO055 is a new sensor IC for implementing an intelligent 9-axis Absolute Orientation Sensor. It is a system in package, integrating a triaxial 14-bit accelerometer, a triaxial 16-bit gyroscope, a triaxial geomagnetic sensor and a 32-bit microcontroller. At just 5.2 x 3.8 x 1.1 mm³, it is significantly smaller than comparable discrete or system-on-board solutions and also is the sensor-hub product of the smallest size that supports Windows 8.1 at present. BNO055 is able to provide not only single data of the three kinds of sensors(accelerometer/gyroscope/geomagnetic), but also fused data, such as quaternions, Euler angles or vectors. Besides, the built-in MCU frees the users from the complexities of algorithm processing, which provides application support in many aspects for smart phone, wearable device and so on.
BMP280 is an absolute barometric pressure sensor especially designed for mobile applications, which can realize the measurement of barometric pressure and temperature(the data can be converted into altitude through the specific formula ). The sensor module is housed in an extremely compact package. It is based on Bosch’s proven Piezo resistive pressure sensor technology featuring high accuracy and linearity as well as long term stability and high EMC robustness. Numerous device operation options offer highest flexibility to optimize the device regarding power consumption, resolution and filter performance.
Now, DFRobot is launching Gravity:BNO055 BMP280 intelligent 10DOF AHRS. This sensor module integrates BNO055 and BMP280 on one board to combine the two sensor into a 10DOF sensor module. The standard Gravity-I2C interface eases the integration process for customers, freeing them from the complexities of multivendor solutions so they can spend more time on product innovation, including novel applications such as wearable hardware. It is also the perfect choice for augmented reality, more immersive gaming, personal health and fitness, indoor navigation and any other application requiring context awareness.
Features
- BNO055:
- Outputs fused sensor data: quaternions, euler angles, rotation vector, linear acceleration, gravity, heading.
- 3 sensors in one device: 16-bit gyroscope, 14-bit accelerometer, geomagnetic sensor
- Intelligent Power Management: normal, low power and suspend mode available
- BMP280:
- Barometric pressure & Temperature sensor
Specification
- Operating Voltage: 3.3V~5V DC
- Operating Current: 5mA
- Gravity-I2C Interface
- BNO055 Accelerometer:
- Acceleration ranges ±2g/±4g/±8g/±16
- Low-pass filter bandwidths 1kHz~<8Hz
- Operation modes: normal, suspend, low power, standby, deep suspend
- On-chip interrupt control: motion-triggered interrupt-signal
- BNO055 Gyroscope:
- Ranges switchable from ±125°/s~2000°/s
- Low-pass filter bandwidths 523Hz~12Hz
- Operation modes: normal, fast power up, deep suspend, suspend, advanced power save.
- On-chip interrupt control: motion-triggered interrupt-signal
- BNO055 Geomagnetic:
- Magnetic field range typical ±1300uT(x-,y-axis);±2500uT(z-axis)
- Magnetic field resolution: ~0.3
- Operating nodes: low power, regular, enhanced regular, high accuracy
- Power modes: normal, sleep, suspend, force
- BMP280 Digital Pressure Sensor:
- Pressure range: 300~1100hPa
- Relative accuracy: ±0.12hPa(±1m)
- Absolute accuracy: ±1hPa(±8.33m)
- Temperature range: 0℃~65℃
- Temperature resolution: 0.01℃
- Operating Temperature: -40~ 80℃
- Product Dimension: 32x27 mm/1.26x1.06”
- For more information, please refer to the attached data sheets of BMP280 and BNO055.*
Pinout and Dimension Diagram


Serial Number | Name | Functionality |
---|---|---|
1 | /VCC | Positive Pole |
2 | -/GND | Negative Pole |
3 | C | I2C-SCL |
4 | D | I2C-SDA |
5 | NBOOT | Boot Mode |
6 | RST | Reset Pin |
7 | INT | Interrupt Output Pin |
8 | I2C_ADDR | BNO055 I2C address Selection |
9 | PS2 | Protocol Selection Pin 2 |
10 | PS1 | Protocol Selection Pin 1 |
11 | BL_IND | Bootstrap Instructions |
PS1 | PS2 | Functionalit |
---|---|---|
0 | 0 | Standard/Fast 12C Interface |
0 | 1 | HID OVER I2C |
1 | 0 | UART Interface |
1 | 1 | Reserved |
Note: the I2C address of BNO055 is set to 0×28 by default. The I2C address of BMP280 is 0×76; the I2C_ADDR of BNO055 can be set as 0x28/0x29. PS1 and PS2 are set to 0 and 0 by default.
API Function
Tutorial
10 DOF integrates BNO055 and BMP280. The I2C address of BNO055 (0×28) and BMP280 (0×76) can be visited through I2C interface, which makes it available to obtain the related position data and environment information.
Preparation
Hardware
- 1×UNO microcontroller Board
- 1×BNO055 BMP280 intelligent 10DOF AHRS(V1.0) Module
- DuPont lines
Software
- Arduino IDE, click to download Arduino IDE
- BNO055 Library
- BMP280 Library How to install library files? Click the link.
Connection Diagram
Sample Code
The function of the program: read the pitch angle, roll angle and yaw angle of BNO055 sensor via I2C interface, and print out the data through the serial port. Using this demo with a small visual software Euler angle visual tool.exe we specifically designed, you can directly observe the attitude variation of 10DOF. As shown below.
/*!
* imu_show.ino
*
* Download this demo to show attitude on [imu_show](https://github.com/DFRobot/DFRobot_IMU_Show)
* Attitude will show on imu_show
*
* Product: https://www.dfrobot.com.cn/goods-1860.html
* Copyright [DFRobot](https://www.dfrobot.com), 2016
* Copyright GNU Lesser General Public License
*
* version V1.0
* date 07/03/2019
*/
#include "DFRobot_BNO055.h"
#include "Wire.h"
typedef DFRobot_BNO055_IIC BNO; // ******** use abbreviations instead of full names ********
BNO bno(&Wire, 0x28); // input TwoWire interface and IIC address
// show last sensor operate status
void printLastOperateStatus(BNO::eStatus_t eStatus)
{
switch(eStatus) {
case BNO::eStatusOK: Serial.println("everything ok"); break;
case BNO::eStatusErr: Serial.println("unknow error"); break;
case BNO::eStatusErrDeviceNotDetect: Serial.println("device not detected"); break;
case BNO::eStatusErrDeviceReadyTimeOut: Serial.println("device ready time out"); break;
case BNO::eStatusErrDeviceStatus: Serial.println("device internal status error"); break;
default: Serial.println("unknow status"); break;
}
}
void setup()
{
Serial.begin(115200);
bno.reset();
while(bno.begin() != BNO::eStatusOK) {
Serial.println("bno begin faild");
printLastOperateStatus(bno.lastOperateStatus);
delay(2000);
}
Serial.println("bno begin success");
}
void loop()
{
BNO::sEulAnalog_t sEul;
sEul = bno.getEul();
Serial.print("pitch:");
Serial.print(sEul.pitch, 3);
Serial.print(" ");
Serial.print("roll:");
Serial.print(sEul.roll, 3);
Serial.print(" ");
Serial.print("yaw:");
Serial.print(sEul.head, 3);
Serial.println(" ");
delay(80);
}
If we compare 10DOF to an airplane whose nose points at due east, the positive direction of X axis will be the direction of the nose, the positive direction of Y axis will be the direction of the left wing, which is due north. Z axis is perpendicular to the plane XOY that formed by X and Y axes. When the 10 DOF’s direction of X, Y, and Z totally coincides with the above-mentioned direction, the values of the pitch, roll and yaw angle are 0°. Here we define: pitch is the angle between the nose and XOY when the airplane noses up or down along the Y axis, and nose up is positive while nose down is negative; roll is the angle between the body and XOY when the airplane rolls along the X axis; yaw is the angle between the nose and XOZ when the airplane moves along the Z axis.


Please note that you need to close the serial port occupied by the printer when using the test software to observe the sensor’s movement posture.
Sample Code
Program Function: Retrieve data from the sensor on the x, y, and z axes, and print it out via the serial port.
/*!
* read_data.ino
*
* Download this demo to test read data from bno055
* Data will print on your serial monitor
*
* Product: https://www.dfrobot.com.cn/goods-1860.html
* Copyright [DFRobot](https://www.dfrobot.com), 2016
* Copyright GNU Lesser General Public License
*
* version V1.0
* date 07/03/2019
*/
#include "DFRobot_BNO055.h"
#include "Wire.h"
typedef DFRobot_BNO055_IIC BNO; // ******** use abbreviations instead of full names ********
BNO bno(&Wire, 0x28); // input TwoWire interface and IIC address
// show last sensor operate status
void printLastOperateStatus(BNO::eStatus_t eStatus)
{
switch(eStatus) {
case BNO::eStatusOK: Serial.println("everything ok"); break;
case BNO::eStatusErr: Serial.println("unknow error"); break;
case BNO::eStatusErrDeviceNotDetect: Serial.println("device not detected"); break;
case BNO::eStatusErrDeviceReadyTimeOut: Serial.println("device ready time out"); break;
case BNO::eStatusErrDeviceStatus: Serial.println("device internal status error"); break;
default: Serial.println("unknow status"); break;
}
}
void setup()
{
Serial.begin(115200);
bno.reset();
while(bno.begin() != BNO::eStatusOK) {
Serial.println("bno begin faild");
printLastOperateStatus(bno.lastOperateStatus);
delay(2000);
}
Serial.println("bno begin success");
}
#define printAxisData(sAxis) \
Serial.print(" x: "); \
Serial.print(sAxis.x); \
Serial.print(" y: "); \
Serial.print(sAxis.y); \
Serial.print(" z: "); \
Serial.println(sAxis.z)
void loop()
{
BNO::sAxisAnalog_t sAccAnalog, sMagAnalog, sGyrAnalog, sLiaAnalog, sGrvAnalog;
BNO::sEulAnalog_t sEulAnalog;
BNO::sQuaAnalog_t sQuaAnalog;
sAccAnalog = bno.getAxis(BNO::eAxisAcc); // read acceleration
sMagAnalog = bno.getAxis(BNO::eAxisMag); // read geomagnetic
sGyrAnalog = bno.getAxis(BNO::eAxisGyr); // read gyroscope
sLiaAnalog = bno.getAxis(BNO::eAxisLia); // read linear acceleration
sGrvAnalog = bno.getAxis(BNO::eAxisGrv); // read gravity vector
sEulAnalog = bno.getEul(); // read euler angle
sQuaAnalog = bno.getQua(); // read quaternion
Serial.println();
Serial.println("======== analog data print start ========");
Serial.print("acc analog: (unit mg) "); printAxisData(sAccAnalog);
Serial.print("mag analog: (unit ut) "); printAxisData(sMagAnalog);
Serial.print("gyr analog: (unit dps) "); printAxisData(sGyrAnalog);
Serial.print("lia analog: (unit mg) "); printAxisData(sLiaAnalog);
Serial.print("grv analog: (unit mg) "); printAxisData(sGrvAnalog);
Serial.print("eul analog: (unit degree) "); Serial.print(" head: "); Serial.print(sEulAnalog.head); Serial.print(" roll: "); Serial.print(sEulAnalog.roll); Serial.print(" pitch: "); Serial.println(sEulAnalog.pitch);
Serial.print("qua analog: (no unit) "); Serial.print(" w: "); Serial.print(sQuaAnalog.w); printAxisData(sQuaAnalog);
Serial.println("======== analog data print end ========");
delay(1000);
}
Sample Code
Program Function: Monitor various interrupts of the sensor, including high-speed motion or low-speed motion interrupts, and rapid tilt interrupts.
/*!
* interrupt.ino
*
* Download this demo to test bno055 interrupt
* Connect bno055 int pin to arduino pin 2
* If there occurs interrupt, it will printr on you serial monitor, more detail please reference comment
*
* Product: https://www.dfrobot.com.cn/goods-1860.html
* Copyright [DFRobot](https://www.dfrobot.com), 2016
* Copyright GNU Lesser General Public License
*
* version V1.0
* date 07/03/2019
*/
#include "DFRobot_BNO055.h"
#include "Wire.h"
typedef DFRobot_BNO055_IIC BNO; // ******** use abbreviations instead of full names ********
BNO bno(&Wire, 0x28); // input TwoWire interface and IIC address
// show last sensor operate status
void printLastOperateStatus(BNO::eStatus_t eStatus)
{
switch(eStatus) {
case BNO::eStatusOK: Serial.println("everything ok"); break;
case BNO::eStatusErr: Serial.println("unknow error"); break;
case BNO::eStatusErrDeviceNotDetect: Serial.println("device not detected"); break;
case BNO::eStatusErrDeviceReadyTimeOut: Serial.println("device ready time out"); break;
case BNO::eStatusErrDeviceStatus: Serial.println("device internal status error"); break;
default: Serial.println("unknow status"); break;
}
}
bool intFlag = false;
void intHandle()
{
intFlag = true;
}
void setup()
{
Serial.begin(115200);
bno.reset();
while(bno.begin() != BNO::eStatusOK) {
Serial.println("bno begin faild");
printLastOperateStatus(bno.lastOperateStatus);
delay(2000);
}
Serial.println("bno begin success");
bno.setOprMode(BNO::eOprModeConfig); // set to config mode
bno.setIntMaskEnable(BNO::eIntAll); // set interrupt mask enable, signal to int pin when interrupt
// bno.setIntMaskDisable(BNO::eIntAccAm | BNO::eIntAccNm); // set interrupt mask disable, no signal to int pin when interrupt
bno.setIntEnable(BNO::eIntAll); // set interrupt enable
// bno.setIntDisable(BNO::eIntAccAm | BNO::eIntAccNm); // set interrupt disable
bno.setAccIntEnable(BNO::eAccIntSetAll); // set accelerometer interrupt enable
// bno.setAccIntDisable(BNO::eAccIntSetAmnmXAxis | BNO::eAccIntSetHgXAxis); // set accelerometer interrupt disable
/* accelerometer any motion threshold to set, unit mg, value is dependent on accelerometer range selected,
* case 2g, no more than 1991
* case 4g, no more than 3985
* case 8g, no more than 7968
* case 16g, no more than 15937
* attenion: The set value will be slightly biased according to datasheet
* tips: default accelerometer range is 4g
*/
// how to trig this: still --> fast move
bno.setAccAmThres(200);
// any motion interrupt triggers if duration consecutive data points are above the any motion interrupt
// threshold define in any motion threshold
bno.setAccIntAmDur(1);
// set high-g duration, value from 2ms to 512ms
bno.setAccHighGDuration(80);
/*
* accelerometer high-g threshold to set, unit mg, value is dependent on accelerometer range selected,
* case 2g, no more than 1991
* case 4g, no more than 3985
* case 8g, no more than 7968
* case 16g, no more than 15937
* Attenion: The set value will be slightly biased according to datasheet
*/
// how to trig this: still --> (very) fast move
bno.setAccHighGThres(900);
// accelerometer (no motion) / (slow motion) settings, 2nd parameter unit seconds, no more than 344
bno.setAccNmSet(BNO::eAccNmSmnmNm, 4);
/*
* accelerometer no motion threshold to set, unit mg, value is dependent on accelerometer range selected,
* case 2g, no more than 1991
* case 4g, no more than 3985
* case 8g, no more than 7968
* case 16g, no more than 15937
* Attenion: The set value will be slightly biased according to datasheet
*/
// hot to trig this: any motion --> still --> still
bno.setAccNmThres(100);
bno.setGyrIntEnable((BNO::eGyrIntSet_t) (BNO::eGyrIntSetHrXAxis | BNO::eGyrIntSetHrYAxis | BNO::eGyrIntSetHrZAxis)); // set gyroscope interrupt enable, in most cases, this is enough.
// bno.setGyrIntEnable(BNO::eGyrIntSetAmYAxis | BNO::eGyrIntSetAmYAxis | BNO::eGyrIntSetAmZAxis); // set gyroscope interrupt enable
// bno.setGyrIntDisable(BNO::eGyrIntSetHrXAxis | BNO::eGyrIntSetAmXAxis); // set gyroscope interrupt disable
/*
* 2nd parameter, high rate threshold to set, unit degree/seconds, value is dependent on gyroscope range selected,
* case 2000, no more than 1937
* case 1000, no more than 968
* case 500, no more than 484
* case 250, no more than 242
* case 125, no more than 121
* Attenion: The set value will be slightly biased according to datasheet
* 3rd parameter, high rate duration to set, unit ms, duration from 2.5ms to 640ms
* Attenion: The set value will be slightly biased according to datasheet
*/
// how to trigger this: still --> fast tilt
bno.setGyrHrSet(BNO::eSingleAxisX, 300, 80);
bno.setGyrHrSet(BNO::eSingleAxisY, 300, 80);
bno.setGyrHrSet(BNO::eSingleAxisZ, 300, 80);
/*
* gyroscope any motion threshold to set, unit mg, value is dependent on accelerometer range selected,
* case 2000, no more than 128
* case 1000, no more than 64
* case 500, no more than 32
* case 250, no more than 16
* case 125, no more than 8
* Attenion: The set value will be slightly biased according to datasheet
* tips: default range is 2000
*/
// how to trigger this: still --> fast tilt
bno.setGyrAmThres(20);
bno.setOprMode(BNO::eOprModeNdof); // configure done
attachInterrupt(0, intHandle, RISING); // attach interrupt
bno.getIntState(); // clear unexpected interrupt
intFlag = false;
}
void loop()
{
if(intFlag) {
intFlag = false;
uint8_t intSta = bno.getIntState(); // interrupt auto clear after read
Serial.println("interrupt detected");
if(intSta & BNO::eIntAccAm)
Serial.println("accelerometer any motion detected");
if(intSta & BNO::eIntAccNm)
Serial.println("accelerometer no motion detected");
if(intSta & BNO::eIntAccHighG)
Serial.println("acceleromter high-g detected");
if(intSta & BNO::eIntGyrHighRate)
Serial.println("gyroscope high rate detected");
if(intSta & BNO::eIntGyrAm)
Serial.println("gyroscope any motion detected");
}
}
Sample Code
Program Function: Perform various configurations on the sensor.
/*!
* config.ino
*
* Download this demo to test config to bno055
* Data will print on your serial monitor
*
* Product: https://www.dfrobot.com.cn/goods-1860.html
* Copyright [DFRobot](https://www.dfrobot.com), 2016
* Copyright GNU Lesser General Public License
*
* version V1.0
* date 07/03/2019
*/
#include "DFRobot_BNO055.h"
#include "Wire.h"
typedef DFRobot_BNO055_IIC BNO; // ******** use abbreviations instead of full names ********
BNO bno(&Wire, 0x28); // input TwoWire interface and IIC address
// show last sensor operate status
void printLastOperateStatus(BNO::eStatus_t eStatus)
{
switch(eStatus) {
case BNO::eStatusOK: Serial.println("everything ok"); break;
case BNO::eStatusErr: Serial.println("unknow error"); break;
case BNO::eStatusErrDeviceNotDetect: Serial.println("device not detected"); break;
case BNO::eStatusErrDeviceReadyTimeOut: Serial.println("device ready time out"); break;
case BNO::eStatusErrDeviceStatus: Serial.println("device internal status error"); break;
default: Serial.println("unknow status"); break;
}
}
void setup()
{
Serial.begin(115200);
bno.reset();
while(bno.begin() != BNO::eStatusOK) {
Serial.println("bno begin faild");
printLastOperateStatus(bno.lastOperateStatus);
delay(2000);
}
Serial.println("bno begin success");
bno.setPowerMode(BNO::ePowerModeNormal); // set to normal power mode
bno.setOprMode(BNO::eOprModeConfig); // must set sensor to config-mode before configure
bno.setAccPowerMode(BNO::eAccPowerModeNormal); // set acc to normal power mode
bno.setGyrPowerMode(BNO::eGyrPowerModeNormal); // set gyr to normal power mode
bno.setMagPowerMode(BNO::eMagPowerModeForce); // set mag to force power mode
// accelerometer normal configure
bno.setAccRange(BNO::eAccRange_4G); // set range to 4g
bno.setAccBandWidth(BNO::eAccBandWidth_62_5); // set band width 62.5HZ
bno.setAccPowerMode(BNO::eAccPowerModeNormal); // set accelerometer power mode
// magnetometer normal configure
bno.setMagDataRate(BNO::eMagDataRate_20); // set output data rate 20HZ
bno.setMagPowerMode(BNO::eMagPowerModeForce); // set power mode
bno.setMagOprMode(BNO::eMagOprModeRegular); // set operate mode
// gyroscope normal configure
bno.setGyrRange(BNO::eGyrRange_2000); // set range
bno.setGyrBandWidth(BNO::eGyrBandWidth_32); // set band width
bno.setGyrPowerMode(BNO::eGyrPowerModeNormal); // set power mode
BNO::sAxisAnalog_t sOffsetAcc; // unit mg, members can't out of acc range
BNO::sAxisAnalog_t sOffsetMag; // unit ut, members can't out of mag range
BNO::sAxisAnalog_t sOffsetGyr; // unit dps, members can't out of gyr range
sOffsetAcc.x = 1;
sOffsetAcc.y = 1;
sOffsetAcc.z = 1;
sOffsetMag.x = 1;
sOffsetMag.y = 1;
sOffsetMag.z = 1;
sOffsetGyr.x = 1;
sOffsetGyr.y = 1;
sOffsetGyr.z = 1;
bno.setAxisOffset(BNO::eAxisAcc, sOffsetAcc); // set offset
bno.setAxisOffset(BNO::eAxisMag, sOffsetMag);
bno.setAxisOffset(BNO::eAxisGyr, sOffsetGyr);
bno.setOprMode(BNO::eOprModeNdof); // shift to other operate mode, reference datasheet for more detail
}
#define printAxisData(sAxis) \
Serial.print(" x: "); \
Serial.print(sAxis.x); \
Serial.print(" y: "); \
Serial.print(sAxis.y); \
Serial.print(" z: "); \
Serial.println(sAxis.z)
void loop()
{
BNO::sAxisAnalog_t sAccAnalog, sMagAnalog, sGyrAnalog, sLiaAnalog, sGrvAnalog;
BNO::sEulAnalog_t sEulAnalog;
BNO::sQuaAnalog_t sQuaAnalog;
sAccAnalog = bno.getAxis(BNO::eAxisAcc);
sMagAnalog = bno.getAxis(BNO::eAxisMag);
sGyrAnalog = bno.getAxis(BNO::eAxisGyr);
sLiaAnalog = bno.getAxis(BNO::eAxisLia);
sGrvAnalog = bno.getAxis(BNO::eAxisGrv);
sEulAnalog = bno.getEul();
sQuaAnalog = bno.getQua();
Serial.println();
Serial.println("======== analog data print start ========");
Serial.print("acc analog: (unit mg) "); printAxisData(sAccAnalog);
Serial.print("mag analog: (unit ut) "); printAxisData(sMagAnalog);
Serial.print("gyr analog: (unit dps) "); printAxisData(sGyrAnalog);
Serial.print("lia analog: (unit mg) "); printAxisData(sLiaAnalog);
Serial.print("grv analog: (unit mg) "); printAxisData(sGrvAnalog);
Serial.print("eul analog: (unit degree) "); Serial.print(" head: "); Serial.print(sEulAnalog.head); Serial.print(" roll: "); Serial.print(sEulAnalog.roll); Serial.print(" pitch: "); Serial.println(sEulAnalog.pitch);
Serial.print("qua analog: (no unit) "); Serial.print(" w: "); Serial.print(sQuaAnalog.w); printAxisData(sQuaAnalog);
Serial.println("======== analog data print end ========");
delay(1000);
}
Sample Code
Program Function: Read the temperature, atmospheric pressure, altitude and other information collected by the 10Dof module, and print the values through the serial port. The units of the measured values are Celsius, pa, and m, respectively. The altitude is calculated from the temperature and pressure values collected by the on-board sensor BMP280, not the actual measured value, and there is an error.
/*!
* read_data.ino
*
* Download this demo to test simple read from bmp280, connect sensor through IIC interface
* Data will print on your serial monitor
*
* Copyright [DFRobot](https://www.dfrobot.com), 2016
* Copyright GNU Lesser General Public License
*
* version V1.0
* date 12/03/2019
*/
#include "DFRobot_BMP280.h"
#include "Wire.h"
typedef DFRobot_BMP280_IIC BMP; // ******** use abbreviations instead of full names ********
BMP bmp(&Wire, BMP::eSdo_low);
#define SEA_LEVEL_PRESSURE 1015.0f // sea level pressure
// show last sensor operate status
void printLastOperateStatus(BMP::eStatus_t eStatus)
{
switch(eStatus) {
case BMP::eStatusOK: Serial.println("everything ok"); break;
case BMP::eStatusErr: Serial.println("unknow error"); break;
case BMP::eStatusErrDeviceNotDetected: Serial.println("device not detected"); break;
case BMP::eStatusErrParameter: Serial.println("parameter error"); break;
default: Serial.println("unknow status"); break;
}
}
void setup()
{
Serial.begin(115200);
bmp.reset();
Serial.println("bmp read data test");
while(bmp.begin() != BMP::eStatusOK) {
Serial.println("bmp begin faild");
printLastOperateStatus(bmp.lastOperateStatus);
delay(2000);
}
Serial.println("bmp begin success");
delay(100);
}
void loop()
{
float temp = bmp.getTemperature();
uint32_t press = bmp.getPressure();
float alti = bmp.calAltitude(SEA_LEVEL_PRESSURE, press);
Serial.println();
Serial.println("======== start print ========");
Serial.print("temperature (unit Celsius): "); Serial.println(temp);
Serial.print("pressure (unit pa): "); Serial.println(press);
Serial.print("altitude (unit meter): "); Serial.println(alti);
Serial.println("======== end print ========");
delay(1000);
}